package com.boe.common.base;

import com.boe.common.util.ListUtil;
import lombok.*;
import java.util.Stack;

public class ScopeStack extends Stack<IScopeData> {

    public <R extends IScopeData> R getLatest(Class<R> clazz, R... enumValues) {
        if (this.size() == 0) return null;

        for (var i = this.size() - 1; i >= 0; i--) {
            var item = this.get(i);
            if (clazz.isAssignableFrom(item.getClass())) {
                if (enumValues.length == 0 || ListUtil.contains(enumValues, item)) {
                    return (R) item;
                } else {
                    continue;
                }
            }
        }
        return null;
    }

}
